package com.company.ljh.medium;

/**
 * @description:
 * 2390. 从字符串中移除星号
 * 提示
 * 中等
 * 23
 * 相关企业
 * 给你一个包含若干星号 * 的字符串 s 。
 *
 * 在一步操作中，你可以：
 *
 * 选中 s 中的一个星号。
 * 移除星号 左侧 最近的那个 非星号 字符，并移除该星号自身。
 * 返回移除 所有 星号之后的字符串。
 *
 * 注意：
 *
 * 生成的输入保证总是可以执行题面中描述的操作。
 * 可以证明结果字符串是唯一的。
 * @projectName:leet_code
 * @see:com.company.ljh.medium
 * @author:ljh
 * @createTime:2023/7/3 16:19
 * @version:1.0
 */
public class 从字符串中移除星号 {

    //1.双指针法，遇到*号，将*号前面的字符串置为！。然后使用string保存新的字符串
    public String removeStars(String s) {
        //保存*号的数量
        int size = 0;
        int fast = s.length() - 1;
        int slow = s.length() - 1;
        char [] chars = s.toCharArray();
        while(fast >= 0 && slow >=0){
            if(chars[slow] == '*'){
                //从当前*后之前开始移除
                if(fast > slow)
                    fast = slow - 1;
                boolean flag = true;
                while(flag){
                    if(fast >= 0 && chars[fast] != '*'){
                        chars[fast] = '!';
                        flag = false;
                    }
                    fast --;
                }
            }
            slow--;
        }
        StringBuilder result = new StringBuilder("");
        for(char c:chars){
            if(c !='*' &&c!='!'){
                result.append(c);
            }
        }
        return result.toString();
    }
    //2.栈，或者直接从右往左遍历即可
}
